hello world及固化至QSPI Flash运行

简介

在Vivado中创建硬件工程

新建Vivado工程

VeryCapture_20250604115611

VeryCapture_20250604115813

VeryCapture_20250618094011

VeryCapture_20250604121357

VeryCapture_20250604122008

VeryCapture_20250618095743

VeryCapture_20250618095822

在Block Design中创建 Processing System

VeryCapture_20250618100007

VeryCapture_20250604135328

VeryCapture_20250604135703

VeryCapture_20250604135821

VeryCapture_20250604135937

Zynq Block Design:显示了 Zynq 处理系统(PS)的各种可配置块,其中灰色部分是不可修改的,绿色高亮部分是可配置的。进入配置页面可以通过两种方法:直接单击各种可配置块(绿色高亮部分)进入其配置页面进行配置,也可以选择左侧的页面导航进入相应的页面进行配置。 PS-PL Configuration:配置 PS-PL接口,包括 AXI GP、HP 等总线接口。 Peripheral I/O Pins:为不同的 I/O 外设选择 MIO/EMIO。 MIO Configuration:为不同的 I/O 外设具体配置 MIO/EMIO。 Clock Configuration:用于配置 PS 输入时钟、外设时钟,以及 DDR 和 CPU 时钟等。 DDR Configuration:用于设置 DDR 控制器配置信息。 SMC Timing Calculation:用于执行 SMC 时序计算。 Interrupts:用于配置 PS-PL 中断端口。

image-20250621125144559

VeryCapture_20250604143436

 

BANK500 中的 MIO14 和 MIO15 被用作 UART 串口通信的引脚,并最终与底板上的 USB 转串口芯片 CH340X 连接。因此,为了实现串口通信的功能,我们需要在 PS 中将 MIO14 和 MIO15 配置成 UART0 模块的接口引脚。

VeryCapture_20250604150543

VeryCapture_20250604150502

点击左侧的 MIO Configuration 页面,在右侧展开 I/O Peripherals > UART0,可以看到其具体的引脚配置信息: MIO14 作为 RX 引脚、MIO15 作为 TX 引脚。

VeryCapture_20250604151515

VeryCapture_20250604151755

VeryCapture_20250604152226

image-20250621130649186

VeryCapture_20250604153711

VeryCapture_20250604153852

VeryCapture_20250604154146

VeryCapture_20250604154323

VeryCapture_20250604154550

在该界面中我们可以选择自动连接 IP 模块的接口。这次工程只有一个 IP 模块,在左侧确认勾选 processing_system7_0,然后点击“OK”。此时 ZYNQ7 PS 模块引出了两组外部接口,分别是 DDR 和 FIXED_IO,引出的接口将会被分配到 ZYNQ器件具体的引脚上。通过点击 ZYNQ7 PS 模块接口处的“+”展开这两组接口,可以观察各包含哪些信号。

VeryCapture_20250604154645

VeryCapture_20250604154855

生成HDL顶层文件

VeryCapture_20250604155500

VeryCapture_20250604160224

VeryCapture_20250604160348

VeryCapture_20250604160822

VeryCapture_20250604160857

VeryCapture_20250604161255

生成 Bitstream 文件并导出xsa文件

如果设计中使用到了 PL 的资源,则需要添加引脚约束,并对设计进行综合、实现和生成 Bitstream 文件。由于本工程为最小系统,没有用到 PL 部分,所以无需这些步骤,可以直接将硬件导出到 xsa。

VeryCapture_20250604162230

在弹出的界面中直接点击next:

VeryCapture_20250604162321

由于我们没有生成bitstream 文件,所以在接下来的界面中直接选择第一个选项,如果生成了bitstream 文件,则点击第二个选项“Include bitstream",点击next:

VeryCapture_20250604162618

接下来会生成一个.xsa文件,这个文件打包了所有的硬件组件,硬件平台信息,之后用vitis软件或者Linux时都会用到.xsa文件。

VeryCapture_20250618102749

最后点击finish完成:

VeryCapture_20250618102827

VeryCapture_20250604164546

在Vitis中创建软件工程

platform project和application project

在vitis中可以创建两种工程:platform project和application project。

对比项Platform ProjectApplication Project
目的定义硬件基础设施开发运行在硬件上的软件
输入依赖Vivado 导出的 .xsa 文件已存在的平台(.xpfm 或直接 .xsa
修改频率低频(硬件稳定后很少改动)高频(代码迭代开发)
输出文件.xpfm(平台描述文件).elf(可执行文件)
典型用户硬件工程师/系统架构师软件工程师/嵌入式开发者

创建vitis工程时,可以先创建platform project,然后再创建基于该platform project的application project。也可以直接创建application project,但是这时会自动创建一个和该application project关联的platform project。

这里以先创建platform project,再创建application project为例,说一下创建过程。

创建platfrom project

之后我们的应用工程都是基于创建的一个平台工程所建立。

image-20250621141749253

VeryCapture_20250618104211

点击"Browse",选择由vivado生成的xsa文件。

VeryCapture_20250605134327

选中之后,下面的选项会自动弹出所使用的操作系统。同时把勾选上"Generate boot components",它会在硬件平台中自动添加fsbl的相关文件。点击"Finish":

image-20250623102451632

至此platfrom project工程创建完成。后续我们创建的应用工程都会基于该平台工程。如图:

image-20250623102742671

如果后续硬件资源文件(.xsa)有修改(通过vivado重新编译生成新的xsa文件),只需update一下硬件资源文件即可,具体操作是在平台工程上右键,弹出的选项中选择“update Hardware specification”。在弹出的窗口中选择新生成的xsa文件。然后对这个平台工程右键操作,选择Build project以重新build该平台工程。

image-20250621144532679

接下来我们需要创建基于该platform project的application project。

创建Application Projec

通过File->New->Appplication Project创建:

image-20250621143033176

在弹出的界面中点击next:

VeryCapture_20250604171626

选择之前创建的platform project:

这里说明一下。如果之前没有创建platform project,可以选择Create a new platform from hardware 页。这样就会创建application project的同时,也创建的platform project。

image-20250623103225954

填写工程名字,点击next:

image-20250623103555160

在接下来的页面可以选择想要的操作系统,本次我们用的裸机,点击next:

VeryCapture_20250604172551

在 "Templates" 中选择 "Hello World":由于创建的是一个简单的 "Hello World"工程,所以模板里边有已经生成的代码,可以不用修改,点击 "Finish":

VeryCapture_20250604173209

至此新应用工程就创建完了,如图:

image-20250623104640363

点击“hello_world_system”->"hello_world"->src,里面就是软件的.c文件:

image-20250623104611615

编译

右击“hello_world” ,点击“build project”对代码进行编译。如果没有错误,将会生成elf文件。如果有错误,将会在Problems 页面看到错误提示。

image-20250623104856653

调试

将开发板启动模式的拨码开关配置成JTAG模式,使用type-c的usb线将开发板上的JTAG口与电脑进行连接,开发板电源已打开。需要另外准备一根type-c的usb线,将开发板上的PS_UART口和电脑连接。同时在电脑上打开串口工具(如MobaXterm),选择识别出的对应的USB串口,将其波特率设置为115200。

image-20250808124540635

点击“Xilinx”->"XSCT Console",右下角会出现XSCT控制台,输入“connect"命令,此命令是建立与目标硬件(如 我们Zynq-7020 开发板)的调试连接。再输入“targets"命令,此命令是列出当前系统中所有可用的调试目标(处理器/硬件组件)。如果出现图中的回复则说明建立连接成功。

VeryCapture_20250605110600

可以通过右键选择Debug as :

image-20250623104955459

或者通过Debug快捷键操作:点击下拉弹出下拉选项,选择需要调试的aplication project :

image-20250623105305485

这时会进入调试模式。默认直接跳转到main()。之后就可以进行单步调试、断点调试:

image-20250623105736534

如果要重新加载程序,可以通过在Debug->[System Project Debug]右键操作,选择中止并relaunch :

image-20250623105935540

Run后,就会在电脑的串口工具上打印出"Hello World"等字符信息。

生成BOOT.bin

BOOT.bin的生成有两种方式:

直接通过“Build Project”生成

在"hello_world_system" 上右击并bulid project,则会自动先对“hello_world”进行编译生成elf文件,然后将生成的elf文件以及平台工程中的fsbl.elf文件、bitstream文件合并生成BOOT.bin文件。最终烧入到flash的就是这个BOOT.bin文件。

image-20250623110335962

image-20250623110634193

手动生成BOOT.BIN

右击“hello_world_system” ,点击"Create Boot Image"。或者通过菜单Xilinx->Create Boot Image进行操作。

image-20250623110853134

选择"Create new BIF file",必须确保"Output format"类型为BIN,如下图:

image-20250623111229773

依次添加如下内容:

最后点击"Create Image"完成创建。

image-20250623111719181

image-20250623111849955

image-20250623112404183

若出现如图所示的结果则说明已创建成功。

image-20250623112104336

后续再手动生成BOOT.bin文件时,就可以点击"Import form existing BIF file",选择正确文件路径,点击"Create Image ":

image-20250623112540555

固化到qspi-flash

点击“Xilinx”->"Program Flash":

VeryCapture_20250605110823

在出现的界面中必须确保”Image File“是所生成的BOOT.BIN文件,”Offset“偏移量从0x00000000开始,”Init File“是”fsbl.elf“文件。

说明下BOOT.Bin和fsbl.elf文件的作用:

BOOT.BIN:

fsbl.elf:

image-20250623112728041

点击"Program"后等待几秒,若出现"Flash Operation Successful"则说明烧写QSPI Flash成功。

VeryCapture_20250605111329

断电开发板,将启动模式对应的拨码开关设置为QSPI启动模式。将PS_UART串口通过type-c线连接到电脑,并上电。在电脑使用串口工具打开相应的该串口。然后按一下开发板上的复位按键,就能在电脑的串口工具上看到相应的输出信息。